如何避免Salesforce Apex代码中5个常见错误,提升开发技巧? |
您所在的位置:网站首页 › second 函数 › 如何避免Salesforce Apex代码中5个常见错误,提升开发技巧? |
Name FROM Account // Criteria Here]; List contacts = [SELECT Id, Name, AccountId FROM Contact] for (Account acct : accounts) { for (Contact con : contacts) { if (con.AccountId == acct.Id) { // Do stuff } } } 此代码位于Batchable Apex中,因此它已经具有更高的60秒Apex CPU限制。 但是,这段代码效率很低。对于每个客户,它会遍历所有联系人以找到特定于该客户的联系人,然后对其进行处理。假如有500个客户和1,000个联系人,那就是500,000次迭代,这是非常不必要的。 最开始编写的开发人员不知道SOQL查询中的子选择,它允许获取与每个父记录相关的子记录。 更高效的代码如下: List accounts = [SELECT Id, Name, (SELECT Id, Name FROM Contacts) FROM Account // Where Clause Here for Desired Accounts]; for (Account acct : accounts) { for (Contact acctContact : acct.Contacts) { // Do something with each account’s contact as needed } } 现在,这段代码效率更高,并且只遍历返回的每个客户的联系人。 易错点2 复制粘贴代码由于需要长期维护,复制粘贴代码是不良的编码习惯。如果重复复制相同的代码进行更改,则必须在所有地方应用该更改。 一种解决方案是使用函数。开发人员可以在整个类或代码库中使用函数,具体取决于其访问级别。 易错点3 编写长函数当一个函数很长时,比如超过50行代码,不仅会导致代码更难理解,而且容易出现错误。 一种解决方案是编写使用辅助函数的较短函数。主函数使用多个较短的函数,而不是一个长函数,尽量将函数保持在20-30行Apex代码。 易错点4 代码嵌套太深嵌套太深的代码也更难推理,更容易出错。 public List getAccountsWithCountry(List accounts) { List accountsWithCountry = new List(); if (accounts != null) { for (Account acct : accounts) { // First Level Of Nesting if (String.isNotBlank(acct.BillingCountry)) { // Second Level of Nesting accountsWithCountry.add(acct); // Third-Level of Nesting } } } return accountsWithCountry; } 此代码示例是一个公共函数,它有三层嵌套: 1. “for-each”循环遍历Account。 2. “if”语句。 3. 将Account添加到“accountsWithCountry”的代码。 这段代码并不是最佳的,代码的嵌套级别最好不超过两层。开发人员在编码时可以反向思考。不要只在Account为空时才继续,先检查它是否为空,如果为空就停止。例如: public List getAccountsWithCountry(List accounts) { List accountsWithCountry = new List(); if (accounts == null) { return accountsWithCountry; } for (Account acct : accounts) { if (String.isNotBlank(acct.BillingCountry)) { accountsWithCountry.add(acct); } } return accountsWithCountry; } 这段代码可以实现同样的目标,但只有两层嵌套。此外,如果进入for-each循环,Account列表不为空,并且可以安全地遍历它。 易错点5 格式错误开发人员应该编写格式良好的代码,使代码更容易阅读和理解。格式错误的代码通常没有空格和缩进。 public class MyBadFormatClass { public String FirstName=''; public Integer Age=0; public String LastName=''; public String getName() { return FirstName + ' ' + LastName; } } 这个类可以编译,但难以阅读和理解。第二行声明了三个变量,第三行是一个函数。以下是重新格式化后的编码,更易于理解。 public class MyBadFormatClass { public String FirstName = ''; public Integer Age = 0; public String LastName = ''; public String getName() { return FirstName + ' ' + LastName; } } - END -返回搜狐,查看更多 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |